home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / tex / mf / inputs / cm / cm85.bug < prev    next >
Text File  |  1993-11-28  |  40KB  |  1,108 lines

  1. This file is a log of changes made to the "new generation" of Computer Modern
  2. fonts, after the first output proofs were ready. I had a great deal of
  3. advice from Neenie Billawala, Matthew Carter, and Richard Southall while
  4. I was making these revisions.
  5.  
  6. Entries are in chronological order; thus the most recent news appears
  7. at the bottom of the file.
  8.  
  9. -------------------------------------------------------------------------------
  10. Changes based on the proofsheets of April 26, 1985
  11. ACCENT.MF:
  12.  lower the idots, umlauts, and tilde (MC)
  13.  Polish ell cross: longer stroke in bold
  14. CMBASE.MF:
  15. COMLIG.MF:
  16.  double quotes too close together in bold (MC)
  17. CSCSPU.MF:
  18.  SS made from two S's
  19. GREEKU.MF:
  20.  Gamma: .25u longer arm
  21.  Lambda: too narrow (MC,NB)
  22.  Xi: 1u wider; shorten middle serifs (MC)
  23.   top and bottom strokes to be arms (NB)
  24.  Psi: more super; thin the lower curve (MC)
  25.   add points 3' and 7' for crisp sans
  26.  Omega: redo the bottom, curl 0 becomes vertical (MC)
  27.   thin from hair to vair at points 3 and 5
  28. PUNCT.MF:
  29.  Monospace period, comma, colon, semicolon made heavier (MC)
  30. ROMAN.MF:
  31.  ligs=2 gets ff, fi, etc.; ligs=1 gets only --, '', etc.
  32.  II kerning introduced
  33.  kern between a and ' in csc
  34. ROMAND.MF:
  35.  0: med_curve decreased to curve; y2l and y4l raised
  36.  1: cap_bar changed to bar in the top stroke
  37.   sans-serif serifs also use bar as the slab height
  38.  2: lighten cap_curve and cap_stem slightly (RS)
  39.   move point 3 down by .5vair (MC)
  40.  4: thin the diagonal still more (NB)
  41.   bar line moves up one pixel when there's a serif below it
  42.  6: move bulb to the right (MC)
  43.   make the lower left curve more_super (RS,NB)
  44.  9: make the upper right curve more_super (RS,NB)
  45. ROMANL.MF:
  46.  a: bulb positioned by its center rather than the left (MC)
  47.  c: right terminals moved closer to the edge (MC,NB)
  48.   more pull on the inside left (RS)
  49.  e: less left sidebar in monospace (MC)
  50.   bold versions to be wider (MC)
  51.   more pull on inside left (MC,RS)
  52.  g: lower edge of loop goes one pixel lower
  53.  varg: point 6 raised above baseline (MC)
  54.   y0 calculated so that it works when x7l=stem_edge
  55.   lower arc goes one pixel lower
  56.  i: monospace version gets more left sidebar (MC)
  57.   dot moves slightly right (NB)
  58.   stem'' increased to stem' (MC,RS,NB)
  59.   slab replaces tiny in correction for dot-too-close
  60.  j: diminish monospace sidebars (MC)
  61.   shift slightly to right (MC)
  62.  k: serif right_jut decreased .8 to .6
  63.   bug fixed in alpha2 (had y1 not y11)(MC,RS,NB)
  64.   decreased diagonal weights
  65.   "if abs(angle(z3-z4)-45)<2:y4:=y3-(x3-x4);fi" rejected; moves y4 down too much
  66.  n: omit pull inside the arch (MC,RS)
  67.   introduce stem_shift, shifts this character and others slightly right (MC)
  68.  o: raise y2l and y4l (RS)
  69.  s: reduced sidebearing in sans (MC)
  70.   increased thickness at edges (.35 to .5) (RS)
  71.   changed to super_arc, and made it more_super (RS)
  72.   raised the top of upper barb to equal top of the character (RS)
  73.   removed typo (`tiny' for `fine')
  74.   reduced flare in upper terminal of sans, and rounded it properly
  75.  t: width to grow in bold case
  76.   height made independent of bar_height
  77.   slightly longer bar (MC)
  78.  v: decreased left stem (RS)
  79.  w: decreased stems (MC,RS)
  80.   monospace version drops middle from 2/3 to .6 and lengthens inner serifs
  81.  x: decreased left stem
  82.  y: decreased left stem
  83.  z: lighter diagonal, longer upper arm (MC,RS,NB)
  84. ROMANP.MF:
  85.  $: tau eliminated
  86. ROMANU.MF:
  87.  A: decrease right stem (MC)
  88.   make the bar thinner (MC,NB)
  89.   bar position based on y0 rather than bar_height
  90.  C: use cap_band instead of vair' at top and bottom (RS)
  91.   correct typo: x2l to be reset, not y2l
  92.  E: middle arm .35u longer, but beak reduced from .7 to .6 (MC)
  93.  F: top arm .25u longer; middle arm as E (MC)
  94.  G: same as C; also the bar is raised one pixel
  95.  J: slightly longer upper left serif
  96.  K: lower diagonal thinned and moved outward
  97.  M: monospace version raised still more in middle
  98.  N: diagonal thinned (MC,RS)
  99.  O: y2l and y4l raised
  100.  R: tail should move to the right (MC,RS,NB)
  101.   bold case gets wider (RS,NB)
  102.  S: changed as s (RS)
  103.  V: took stem_corr off the left stem (MC)
  104.  W: monospace version takes center down from 2/3 to .6, lengthens inner jut
  105.  X: took stem_corr off the left stem (MC)
  106.  Y: took stem_corr off the left stem (MC)
  107.  Z: diagonal made lighter in sans (MC)
  108.   upper arm made longer (MC,RS)
  109. ROMLIG.MF:
  110.  equalize stem weights (RS,NB)
  111. ROMSPL.MF:
  112.  ae, oe: incorporate changes of a and e and o
  113.  ss: more stem weight, less curve weight, less bulb (MC,NB)
  114.  dotless i,j: see i,j
  115. ROMSPU.MF:
  116.  AE: middle arm changes as E (MC)
  117.   if hefty and monospace, avoid the serif on middle arm
  118.   bars not aligned if hefty
  119.   if monospace, middle stem moves to right
  120.  OE: middle arm changes as in AE (MC)
  121.   middle stem lightened
  122. ROMSUB.MF:
  123.  blankspace: not so close to sides
  124. SYM.MF:
  125. CMR10.MF etc:
  126.  bar_height raised in the quote and bold fonts (MC,NB)
  127.  comma_depth in cmtt10 increased from 40 to 50 (MC)
  128.  cap_notch_cut decreased in cmsc10, cmsx10
  129.  apex_o decreased in cmr10, cmb10, cmbx10, cmbx5, cmcsc10, cmtt10
  130.  o decreased in cmb10
  131.  cap_jut decreased from 39 to 34 in cmb10; cap_serif_fit increased 5 to 6
  132.  cmbx5 gets smaller beak, fudge, cap_ess; more apex_corr
  133. GENERAL:
  134.  "robustness" added when points like x8r of "a" are calculated
  135.   (this affects a,b,d,varg,j,p,q,t,u,dj,ae,6,9,f_stroke)
  136.  "robustness" also added to avoid curl at end of paths
  137.   (this affects c,e,s,C,G,S,1,5,ae,oe,breve,parens)
  138.  "term" subroutine adds robustness for sans-serif terminals
  139.   (this affects C,G,J,S,f_stroke,j,ss,ae,oe,2,3,5,6,9,$,&,?,@)
  140.  code revised to use "pos" instead of "penpos" when possible
  141. Changes based on the proofsheets of May and June, 1985
  142. ROMAND.MF:
  143.  1: use o instead of apex_o
  144.  4: bar line height shouldn't depend on bar_height
  145.  5: sans-serif lower terminal position raised; depends on upper left edge
  146.     bug in arm at top (0 for 90) made all hefty arms too small
  147.  9: disappears at link
  148. ROMANU.MF:
  149.  B: middle bar positioned by its middle, not its bottom (RS)
  150.     serifed lobes thickened slightly at bottom (RS)
  151.  C: lower terminal is tilted the other way
  152.  C,G: upper terminal in sans-serif is tilted slightly
  153.     upper barb is darkened
  154.  J: tilt the lower terminal
  155.  K: lighten the main diagonal (serif case) (RS)
  156.     lighten the upper diagonal (sans-serif case) (RS)
  157.  M: remove apex_corr (RS)
  158.  N: lighten the diagonal
  159.  P: too light below counter (RS)
  160.  Q: sharpen upper right corner of sans-serif tail (RS)
  161.     top of tail thickened and moved slightly left
  162.  S: less super at upper left and lower right (MC)
  163.     barb to go below baseline
  164.     barbs darkened
  165.     add weight at top, bottom in sans_serif version (RS)
  166.     tilt the lower terminal like the upper one
  167.     top weight needs to be maxed with fine.breadth
  168.  W: top middle stems allowed to overlap in serifed case
  169.     second inner serif made no longer than left outer serif (MC)
  170.     ceiling must become floor, to ensure that x5r>=x4r-mid_corr
  171.  Z: diagonal still too heavy, because previous change was ineffective
  172.     beaks made darker
  173.     better positioning of y2 and y3 when tiny is zero
  174. CSCSPU.MF:
  175.  J,SS: changes from J and S
  176. ROMANL.MF:
  177.  a: inappropriate uses of "fine" are removed
  178.     bh introduced to guard against "wild" bar heights
  179.     thin_join introduced at point 9
  180.     robustness logic changed so that x8l-x8r<=u
  181.  c: too much weight constrast between strokes in sans_serif (RS)
  182.     top terminal lowered to match a
  183.     bottom terminal tilted the other way
  184.  d: fine.breadth should have been thin_join as in b, p, q
  185.  e: 1+xpart changed to xpart
  186.     bottom terminal tilted the other way
  187.  g: sans-serif ear to use z0l and z0r
  188.  h,m,n: left inner serifs stay at jut length
  189.  i,l: mod_width for better fit at lowres
  190.  j: reposition stem for better fit (use .5w+2.5u, not w-2.5u)
  191.     remove bug in "pos" change
  192.  k: upper diagonal serif lengthened from 1.2jut to 1.4jut (RS)
  193.     diagonals made still lighter
  194.  r: thin_join introduced
  195.  s: barb to go below baseline
  196.     barbs darkened
  197.     add weight at top, bottom in sans_serif version (RS)
  198.     tilt the lower terminal like the upper one (RS)
  199.     top weight needs to be maxed with fine.breadth
  200.  t: bar extended still more at right (RS)
  201.  v: decreased the width by .25width_adj#
  202.  w: overlap allowed as in W
  203.     second inner serif made no longer than left outer serif (MC)
  204.     ceiling must become floor, to ensure that x5r>=x4r-mid_corr
  205.  x: decreased the width by .5width_adj# (RS)
  206.  y: sans-serif tail curls up too far (RS)
  207.  z: beaks too light; decrease the diagonal to compensate (RS)
  208.     better positioning of y2 and y3 when tiny is zero
  209. ROMSPL.MF:
  210.  dotless i and j: as i and j
  211.  ae and oe: bottom terminal tilted the other way
  212.  ae: corrected as a
  213. ROMSPU.MF:
  214.  AE: x12 based on x1l rather than x1, works better in bold cases (RS)
  215.  OE: left curve not to be pulled
  216. GREEKU.MF:
  217.  Phi and Psi: middle parts must keep away from the serifs
  218. ROMANP.MF:
  219.  $: strengthened the terminals in sans-serif case, and tilted them
  220.  &: opened the eye by moving point 8 left .5u (RS)
  221.  ?: tilted the sans-serif terminal and moved it down a little more
  222. PUNCT.MF:
  223.  %: move the diagonal a bit left at the top
  224.  ( and ): 3.5( changed to 3(.
  225.  [ and ]: round changed to ceiling and floor, avoids disappearing brackets
  226.  @: inner a placed by its edges instead of its stem centers (RS)
  227. ITALL.MF:
  228.  f: lower bulb moved left; .5 changed to .6 between bulb and stem
  229.  k: bug in lower right stroke (missing e's)
  230.  l: bug in italic correction for math fitting (u not u#)
  231.  m: avoid hooks in monospace version
  232.  p: lengthed left serif at bottom from .5jut to .75jut
  233.  x: bulbs moved .25u further out; .5 used between bulb and stem
  234.  w: avoid hook in monospace version
  235. ITALIG.MF:
  236.  all five: changed like f
  237.  fi: made 1u less wide
  238.  fl,ffl: made .5u less wide, bulb now touches the l stem
  239.  ffi: made .75u less wide
  240. GREEKL.MF:
  241.  beta, gamma, zeta, xi, omega, varepsilon: +eps at the tight turns
  242.  gamma: final diagonal should be more slanted (MC)
  243.  zeta: as tall as xi, shallower diagonal slant (MC)
  244.  kappa: bug in lower right stroke (missing e's)
  245.  xi: raise the bottom diagonal and distort arc slightly (MC)
  246.  chi: introduce slight curve in main diagonal stroke
  247.  varphi: too wide at right half bowl (MC)
  248. ITALMS.MF:
  249.  wp: bulb smaller, bottom a little more open
  250. ITALD.MF:
  251.  5: changed like 5 in ROMAND
  252. OLDDIG.MF:
  253.  2: top a bit narrower, bottom a bit wider (MC)
  254.  5: changed like 5 in ROMAND
  255. SYM.MF:
  256.  plus-minus: shift depends on u not asc_height
  257. SYMBOL.MF:
  258.  minus-plus: shift depends on u not asc_height
  259.  up-and-down arrows (characters '154 and '155): taller and deeper
  260.  clubsuit: wider
  261.  spadesuit: y1+1 changed to y1+.75 (also in clubsuit)
  262. ROMAN.MF:
  263.  eliminated kerning between L and O,C,G,Q,U (also in TEXTIT and CSC)
  264. MATHEX.MF:
  265.  font_x_height needed to be set, for positioning of accents
  266. CMB10.MF:
  267.  dishing is too much (on all bold fonts)
  268. CMR5.MF:
  269.  letter_fit decreased 10 to 5
  270. CMBX5.MF:
  271.  fudge should be 1 (cap_stem 8=:7 in aps mode was too much)
  272.  decrease letter_fit drastically; this means f-ligatures must come back
  273.  lowercase parameters increased by 2/36
  274. CMBI10.MF:
  275.  lowercase serifs too short. (same change to all the italic fonts)
  276. CMSX10.MF:
  277.  decrease `ess' (RS)
  278. CMTC10.MF:
  279.  fudge is too much in lowercase
  280. CMCC10.MF:
  281.  lowercase more extended
  282.  much less letterspace in caps
  283.  increase lower.cap_curve, decrease lower.o
  284. CMSQI8.MF:
  285.  slope shouldn't be so much (RS)
  286.  increase `ess' (RS)
  287.  
  288. GENERAL:
  289.  serif-abutment corrections changed to +1 instead of +2
  290.  vround used for vertical rounding
  291.  
  292. CMBASE.MF:
  293.  new way to set shrink_fit (0,1,2) for monotonicity with letter_fit
  294.  letter_fit not included in mono_charwd
  295.  fine must be positive (else we lose barbs)
  296.  thin_join must be positive (else h_stroke gives a bad pos)
  297. Changes based on the `version 0' test fonts of July 12
  298. [not showing hundreds of changes to the `typography' of the programs]
  299.  
  300. Driver files in general:
  301. Frequency info (from MANUAL.TEX[tex,dek]) was used to order the ligtables
  302. font_xheight changed to font_x_height (a change to PLAIN.MF)
  303.  
  304. Program files in general:
  305.  use `hround' instead of `round' wherever granularity might be wanted
  306.  less_rounded was taken out; autorounded occasionally put in
  307.  arm($,$$,...), the value of y$$ was adjusted by eps (lower) or -eps (upper)
  308.  
  309. Parameter files in general:
  310.  new 12pt and 17+pt fonts; more sans serif fonts
  311.  new comment at bottom of all parameter files: `switch to the driver file'
  312.  
  313. ACCENT.MF:
  314.  ^: eps subtracted from y1 (helps avoid degenerate equations in ultralowres)
  315.  '`: eps added to y1
  316.  
  317. ROMAN.MF:
  318.  kern entry for gj had the wrong sign
  319.  kerns for v removed in sans serif
  320.  new kern for aj in serif case
  321.  new kern for ar in sans serif
  322.  
  323. ROMAND.MF:
  324.  3: pos3 needed to be maxed with fine.breadth
  325.     y1r,y9r needed to be adjusted by eps
  326.  6,9: keep x1 on the correct side of x2 at lowlowres
  327.     (this change also affects OLDDIG, ITALD, and ITALMS partial sign)
  328.  
  329. ROMANP.MF:
  330.  $: less_tense bulbs
  331.  
  332. ROMSPL.MF:
  333.  ss: ensure x5 not > x4l at low resolutions
  334.  
  335. ROMLIG.MF:
  336.  itc shouldn't include the slant...
  337.  
  338. COMLIG.MF:
  339.  em dash should be one em wide (add letter_fit# to the adjustments)
  340.  
  341. BIGOP.MF:
  342.  \displaystyle coproduct sign had 1.2bracket instead of 1.8bracket
  343.  charlist syntax changed from commas to colons
  344.  
  345. BIGDEL.MF:
  346.  extensible double arrow: position wasn't computed as in top and bottom
  347.  charlist syntax changed from commas to colons
  348.  
  349. BIGACC.MF:
  350.  charlist syntax changed from commas to colons
  351.  
  352. ITALL.MF:
  353.  c: point 1 made definitely greater than point 2, for lowlowres
  354.  q: x4 increased by eps, for lowlowres path intersection
  355.  r: x4 based on w, not 5u
  356.  s: max(ess,fine.breadth)
  357.     add eps and 2eps for lowlowres case (cmmi6 at 100/in)
  358.  
  359. ITALMS.MF:
  360.  wp: x6r must not be less than x1r at lowlowres
  361.  
  362. TSETSL.MF:
  363.  gamma: last time's bugfix from GREEKL needs to be here too
  364.  
  365. GREEKL.MF:
  366.  omega: add 2eps to x4-x6
  367.  lambda: make sure that y3>y4 at lowlowres
  368.  zeta: make sure that x2>x0 at lowlowres
  369.  varsigma: make sure that x1>x2 at lowlowres
  370.  
  371. CMFIB8.MF:
  372.  decreased serif_fit, cap_serif_fit; increased curve, cap_curve
  373.  
  374. CMBASE.MF:
  375.  l,r made newinternals
  376.  serif darkness and skew switches now done with boolean variables
  377.  comma and ammoc: 2eps addedto/subtractedfrom position of x@2
  378.  mod_width now called change_width
  379.  ess and cap_ess initialized to preserve ratios with stem and cap_stem
  380.  mode="string" had to be handled properly
  381.  ^ and ! changed to t_ and o_, as per new PLAIN conventions
  382.  make cmchar "outer"
  383.  t_ is now `relaxed' if it is useless
  384.  soft is now softjoin in PLAIN (we must set join_radius:=u)
  385.  eps is now in PLAIN
  386.  vair is vrounded but at least 1; also slab, etc.
  387.  cal nibs, yscaled by cap_hair not vair
  388.  autorounding and smoothing turned off
  389.  
  390. ROMANL.MF:
  391.  a: `footed' version is .25u tighter at the right
  392.  b,d,varg,p,q: x4l position relative to .5(w-serif_fit) not 5u
  393.  e: testpath uses .r not .l (because of cmss10)
  394.  f: added 1 at right for monospace lowres versions
  395.  varg: robust sans-serif terminal at tail
  396.  m: missing `round' in r adjustment caused noninteger chardx
  397.  r: x4 based on w, not 5.25u
  398.  s: watch out that ess isn't so small that badpos error occurs (also ROMANU)
  399.     barbs made longer; based on middle stroke not just h
  400.  t: sans-serif terminal made more robust in extreme cases
  401.  w: in non-monospace hefty serif case, the middle point comes to .8h not h
  402.  y: robust sans-serif terminal at tail
  403.  
  404. ROMANU.MF:
  405.  E: good.y used in y9
  406.  
  407. PUNCT.MF:
  408.  []: side_thickness needed to be maxed with crisp.breadth
  409.      +1 or -1 makes lowres versions more distinctive
  410.  #: tricky part lost at low resolution
  411.  
  412. SYMBOL.MF:
  413.  angle brackets: +1 and -1 to make lowres versions more distinctive
  414.  aleph: eps added so that y5 will be well defined at lowlowres
  415.  
  416. SYM.MF:
  417.  integral sign: bulbs need to be in right direction at lowlowres
  418.  
  419. CALU.MF:
  420.  A: apex moved slightly down
  421.  D: less flat at top, slightly lower lobe
  422.  F: u less right sidebar
  423.  H: soft corner at upper left
  424.  I: middle stroke more like J, upper bar a little further right
  425.  K: introduce t_ in case of aspect_ratio
  426.  L: darker
  427.  M: lighter first diagonal; clean the joins
  428.  N: lighter diagonal; clean bottom right; .5u less right sidebar
  429.  O: shortened the inner stroke
  430.  P: stem comes lower
  431.  Q: tail not so long at left
  432.  R: not so flat at top; diagonal less tense; tail less high
  433.  T: narrower, also changed like I, .5u less right sidebar,
  434.      heavier, not so high at right
  435.  U: less extreme curve at lower left
  436.  V: cleaned up at bottom; lighter first diagonal; slightly wider
  437.  W: changed like V, but double
  438.  X: new design, less rigid
  439.  Y: new design based more on V than U
  440.  Z: tighter at right, heavier at top and bottom
  441.  
  442. CMSS10.MF:
  443.  decreased notch_cut and bar_height
  444.  
  445. %Note: The following can presumably be deleted; I removed it from CMBASE because
  446. %  I don't think it is used any more:
  447. vardef parallel_pos(expr d,u,v,w) = % point at distance $d$ from $u$,
  448.   % on the line through $w$ that's parallel to |u..v|
  449.  pair p_; p_=w+whatever*(u-v)=u+whatever*(u-v) rotated 90;
  450.  numeric d_; d_=length(u-p_);  % distance from $w$ to |u..v|
  451.  if d_>=d: p_ else: p_+(d+-+d_)*unitvector(v-u) fi enddef;
  452. Changes subsequent to `Version 1' as released on October 7, 1985.
  453.  
  454. 1. thin_join should be subject to blacker:
  455. @x in CMBASE.MF, the font_setup routine
  456.  define_whole_pixels(letter_fit,thin_join,fine,crisp,tiny);
  457.  define_whole_vertical_pixels(body_height,asc_height,
  458.   cap_height,fig_height,x_height,comma_depth,desc_depth,serif_drop);
  459.  define_whole_blacker_pixels(hair,stem,curve,flare,
  460. @y
  461.  define_whole_pixels(letter_fit,fine,crisp,tiny);
  462.  define_whole_vertical_pixels(body_height,asc_height,
  463.   cap_height,fig_height,x_height,comma_depth,desc_depth,serif_drop);
  464.  define_whole_blacker_pixels(thin_join,hair,stem,curve,flare,
  465. @z
  466. @x
  467.  if thin_join=0: thin_join:=1; fi
  468. @y
  469. @z
  470. [Note, December 11: My first correction also introduced the statement
  471.  if fine<thin_join: fine:=thin_join; fi
  472. in place of
  473.  if fine=0: fine:=1; fi
  474. but I can't understand why I would do such a stupid thing!]
  475.  
  476. 2. A new subroutine needed in CMBASE.MF (for cases with aspect_ratio<>1):
  477. vardef Vround primary y = y_:=vround y;
  478.  if y_<min_Vround: min_Vround else: y_ fi enddef;
  479. newinternal y_,min_Vround;
  480.  
  481. @x related changes to the font_setup routine (in CMBASE.MF):
  482.  forsuffixes $=vair,bar,slab,cap_bar,cap_band:
  483.   $:=vround($.#*hppp+blacker); if $<=1: $:=1; fi endfor
  484. @y
  485.  define_whole_vertical_blacker_pixels(vair,bar,slab,cap_bar,cap_band);
  486. @z
  487. @x
  488.  vair':=max(1,vround(vair+vair_corr));
  489.  vstem:=max(1,vround .8[vair,stem]);
  490.  cap_vstem:=max(1,vround .8[vair,cap_stem]);
  491. @y
  492.  vair':=vround(vair+vair_corr);
  493.  vstem:=vround .8[vair,stem]; cap_vstem:=vround .8[vair,cap_stem];
  494. @z
  495. @x
  496.  pickup pencircle scaled rule_thickness; rule.nib:=savepen;
  497. @y
  498.  min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth);
  499.  forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem:
  500.   if $<min_Vround: $:=min_Vround; fi endfor
  501.  pickup pencircle scaled rule_thickness; rule.nib:=savepen;
  502. @z
  503.  
  504. The Vround routine is substituted for vround in the programs for
  505.   Macron, line 6 (in ACCENT.MF)
  506.   Variant epsilon, line 5 (in GREEKL.MF)
  507.   Sigma, line 6 (in GREEKU.MF)
  508.   Omega, line 14 (in GREEKU.MF)
  509.   2, line 6 (in OLDDIG.MF and ROMAND.MF)
  510.   7, lines 6 and 8 (in OLDDIG.MF and ROMAND.MF)
  511.   g, lines 6 and 8 (in ROMANL.MF)
  512.   s, line 6 (in ROMANL.MF)
  513.   y, line 9 (in ROMANL.MF)
  514.   z, line 6 (in ROMANL.MF)
  515.   &, line 39 (in ROMANP.MF)
  516.   ?, line 18 (in ROMANP.MF)
  517.   Spanish open ?, line 17 (in ROMANP.MF)
  518.   Z, line 6 (in ROMANU.MF)
  519.   smile and frown, line 4 (in ROMMS.MF)
  520.  
  521. 3. Typo in program for oe ligature.
  522. @x in file ROMSPL.MF
  523. else: left_curve=max(tiny.breadth,hround(curve-2stem_corr));
  524. @y
  525. else: left_curve=max(fine.breadth,hround(curve-2stem_corr));
  526. @z
  527.  
  528. 4. Forgotten update to program for SS.
  529. @x in file CSCSPU.MF
  530. pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90);
  531. pos0(cap_ess,theta); pos7(s_slab,-90);
  532. x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi; top y2l=h+o; bot y7r=-o;
  533. y0=.52h; lft x3l=hround u; rt x6r=hround(w-u);
  534. x3r-x3l=x6r-x6l=hround .5[s_slab,cap_ess] -fine;
  535. @y
  536. numeric ess'; ess'=max(fine.breadth,cap_ess);
  537. pickup fine.nib; pos2(max(fine.breadth,s_slab-vround vair_corr),-90);
  538. pos0(ess',theta); pos7(s_slab,-90);
  539. x2+x7=2x0=w; x7-x2=if serifs: u else: 0 fi; top y2l=h+o; bot y7r=-o;
  540. y0=.52h; lft x3l=hround u; rt x6r=hround(w-u);
  541. x3r-x3l=x6r-x6l=hround .5[s_slab,ess']-fine;
  542. @z
  543.  
  544. 5. Hairline in `k' was overcorrected. (Pavel Curtis)
  545. @x in file ROMANL.MF
  546. stem3=max(tiny.breadth,hround(fudged.hair-4stem_corr));
  547. @y
  548. stem3=max(tiny.breadth,hround(fudged.hair if hefty:-\\4stem_corr fi));
  549. @z
  550.  
  551. 6. Too much kerning in "We", etc., in sans-serif fonts
  552. @x in file ROMAN.MF and TEXSET.MF
  553.  ligtable "F": "V": "W": "o" kern kk#, "e" kern kk#, "u" kern kk#,
  554.    "r" kern kk#, "a" kern kk#, "A" kern kkk#,
  555. @y
  556.  ligtable "F": "V": "W": if serifs: "o" kern kk#, "e" kern kk#, "u" kern kk#,
  557.     "r" kern kk#, "a" kern kk#, "A" kern kkk#,
  558.    else: "o" kern k#, "e" kern k#, "u" kern k#,
  559.     "r" kern k#, "a" kern k#, "A" kern kk#, fi
  560. @z
  561. @x in file TITLE.MF
  562.  ligtable "F": "V": "W": "A" kern kkk#,
  563. @y
  564.  ligtable "F": "V": "W": "A" kern if serifs: kkk# else: kk#\\fi,
  565. @z
  566. @x in file CSC.MF
  567.  ligtable "F": "V": "W": "a" kern kkk#, "A" kern kkk#,
  568. @y
  569.  ligtable "F": "V": "W": if serifs: "a" kern kkk#, "A" kern kkk#,
  570.   else: "a" kern kk#, "A" kern kk#, fi
  571. @z
  572. @x in file CSC.MF
  573.  ligtable "f": "v": "w": "a" kern kkk#,
  574. @y
  575.  ligtable "f": "v": "w": "a" kern if serifs: kkk# else: kk#\\fi,
  576. @z
  577.  
  578. 7. dish serifs need to be more robust when dishing is very small.
  579. @x in file CMBASE.MF
  580.   if y$<y$$: dish_out=bot y$; dish_in=dish_out+dish;
  581.   else: dish_out=top y$; dish_in=dish_out-dish; fi
  582.   erase fill\\(x@1,dish_out)..(x$,dish_in){right}..(x@@1,dish_out)--cycle;
  583. @y
  584.   if y$<y$$: dish_out=bot y$; dish_in=dish_out+dish; let rev_=reverse;
  585.   else: dish_out=top y$; dish_in=dish_out-dish; let rev_=relax; fi
  586.   erase fill rev_
  587.    ((x@1,dish_out)..(x$,dish_in){right}..(x@@1,dish_out)--cycle);
  588. @z
  589.  
  590. 8. more robustness in case thin_join is too big
  591. @x in file ROMANL.MF, program for "b"
  592. pos4(vair,90); pos5(curve,0);
  593. pos6(vair,-90); penpos7(x3l-x3r,-180);
  594. rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height];
  595. @y
  596. pos4(vair,90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180);
  597. rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l),1/3[rt x2,edge]);
  598. y3=1/8[bar_height,x_height];
  599. @z
  600. @x ibid, program for "d"
  601. pos4(vair,90); pos5(curve,180);
  602. pos6(vair,270); penpos7(x3r-x3l,360);
  603. lft x3l=1/3[lft x2,edge]; y3=1/8[bar_height,x_height];
  604. @y
  605. pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
  606. lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),1/3[lft x2,edge]);
  607. y3=1/8[bar_height,x_height];
  608. @z
  609. @x ibid, program for variant "g"
  610. pos4(vair,90); pos5(curve,180);
  611. pos6(vair,270); penpos7(x3r-x3l,360);
  612. lft x3l=2/3[lft x2,edge]; y3=bar_height;
  613. @y
  614. pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360);
  615. lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height;
  616. @z
  617. @x ibid, program for "p"
  618. rt x3l=1/3[rt x2,edge]; y3=1/8[bar_height,x_height];
  619. @y
  620. rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l), 1/3[rt x2,edge]);
  621. y3=1/8[bar_height,x_height];
  622. @z
  623. @x ibid, program for "q"
  624. lft x3l=2/3[lft x2,edge]; y3=bar_height;
  625. @y
  626. lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height;
  627. @z
  628. @x ibid, proram for "q"
  629. x6l=x4l-.2u; bot y6r=-oo;
  630. lft x7l=1/3[lft x2,edge]; y7=min(y3,y6+y4-y3+.6vair);
  631. @y
  632. x6l=x4l-.2u; bot y6r=-oo; y7=min(y3,y6+y4-y3+.6vair);
  633. lft x7l=min(lft x7l-(rt x7r-tiny.rt x2r),1/3[lft x2,edge]);
  634. @z
  635.  
  636. 9. More robust "c" and "e" and "C"
  637. @x in file ROMANL.MF, program for "c"
  638.  (x,y4l)=whatever[z4r,z5l]; x4l:=x;
  639. @y
  640.  (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u);
  641. @z
  642. @x ibid, program for "e"
  643.  (x,y4l)=whatever[z4r,z5]; x4l:=x;
  644. @y
  645.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  646. @z
  647. @x in file ROMSPL.MF, programs for "ae" and "oe"
  648.  (x,y14l)=whatever[z14r,z15]; x14l:=x;
  649. @y
  650.  (x,y14l)=whatever[z14r,z15]; x14l:=min(x,x14l+.5u);
  651. @z
  652. @x in file ROMANU.MF, programs for "C" and "G"
  653.  (x2l',y2l)=whatever[z2r,z1l]; x2l:=x2l';
  654.  (x4l',y4l)=whatever[z4r,z5l]; x4l:=x4l';
  655. @y
  656.  (x2l',y2l)=whatever[z2r,z1l]; x2l:=min(x2l',x2l+.5u);
  657.  (x4l',y4l)=whatever[z4r,z5l]; x4l:=min(x4l',x4l+.5u);
  658. @z
  659.  
  660. 10. More robust foot in "a"
  661. @x in file ROMANL.MF
  662.   filldraw stroke z5'e---z10e...z11e{right};  % foot
  663. @y
  664.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  665.   filldraw z5'l---z10l...z11l{right}--z11r
  666.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  667. @z
  668.  
  669. 11. Barbs less sharp
  670. @x in file ROMANU.MF, programs for "C" and "G"
  671.  x6=x1r; top y6=h+o; x1r-x1'=2cap_curve-fine; y1'=y1;
  672.  path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left};
  673.  numeric t; t=xpart(upper_arc intersectiontimes (z6--z1'));
  674.  filldraw z1r--z6--subpath(t,0) of upper_arc--cycle; % barb
  675. @y [actually "G" had something similar but not identical]
  676.  pos6(.3[fine.breadth,cap_hair],0); x6r=x1r; top y6=h+o;
  677.  x1r-x1'=2cap_curve-fine; y1'=y1;
  678.  path upper_arc; upper_arc=z1{x2-x1,10(y2-y1)}..z2{left};
  679.  numeric t; t=xpart(upper_arc intersectiontimes (z6l--z1'));
  680.  filldraw z1r--z6r--z6l--subpath(t,0) of upper_arc--cycle; % barb
  681. @z
  682. @x ibid, program for "S"
  683.  x10=x1l; top y10=top y2l; x9=x8r; bot y9=bot y7r;
  684.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8;
  685.  numeric t; t=xpart(upper_arc intersectiontimes(z10--z1'));
  686.  filldraw z1l--z10--subpath(t,0) of upper_arc--cycle;  % upper barb
  687.  t:=xpart(lower_arc intersectiontimes(z9--z8'));
  688.  filldraw z8r--z9--subpath(t,1) of lower_arc--cycle;  % lower barb
  689. @y
  690.  pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0);
  691.  x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r;
  692.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8;
  693.  numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1'));
  694.  filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle;  % upper barb
  695.  t:=xpart(lower_arc intersectiontimes(z9r--z8'));
  696.  filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle;  % lower barb
  697. @z [the same change goes into file CSCSPU.MF, the program for two S's]
  698. @x in file ROMANL.MF, program for "s"
  699.  x10=x1l; top y10=top y2l; x9=x8r; bot y9=bot y7r;
  700.  x1l-x1'=x8'-x8r=1.6curve-fine; y1'=y1; y8'=y8;
  701.  numeric t; t=xpart(upper_arc intersectiontimes(z10--z1'));
  702.  filldraw z1l--z10--subpath(t,0) of upper_arc--cycle;  % upper barb
  703.  t:=xpart(lower_arc intersectiontimes(z9--z8'));
  704.  filldraw z8r--z9--subpath(t,1) of lower_arc--cycle;  % lower barb
  705. @y
  706.  pos10(.3[fine.breadth,cap_hair],0); pos9(.3[fine.breadth,cap_hair],0);
  707.  x10r=x1l; top y10=top y2l; x9l=x8r; bot y9=bot y7r;
  708.  x1l-x1'=x8'-x8r=1.6cap_curve-fine; y1'=y1; y8'=y8;
  709.  numeric t; t=xpart(upper_arc intersectiontimes(z10l--z1'));
  710.  filldraw z1l--z10r--z10l--subpath(t,0) of upper_arc--cycle;  % upper barb
  711.  t:=xpart(lower_arc intersectiontimes(z9r--z8'));
  712.  filldraw z8r--z9l--z9r--subpath(t,1) of lower_arc--cycle;  % lower barb
  713. @z
  714.  
  715. 12. Italic ampersand more robust
  716. @x in file ITALP
  717.  & pulled_arc.e(9,10)...{dir(theta+90)}z11e;  % bowls, loop, and stem
  718. @y
  719.  & {{interim superness:=more_super; pulled_arc.e(9,10)}}
  720.  ..tension .9 and 1..{dir(theta+100)}z11e;  % bowls, loop, and stem
  721. @z
  722.  
  723. 13. h_stroke more robust (esp in case of typewriter-style m)
  724. @x in file CMBASE
  725.  pickup fine.nib; pos@0(thin_join,180);
  726. @y
  727.  penpos@0(min(rt x$r-lft x$l,thin_join)-fine,180); pickup fine.nib;
  728. @z
  729.  
  730. 14. eliminate dishing in conflict with arm.
  731. Put a new subroutine into CMBASE.MF:
  732. def nodish_serif(suffix $,$$,@)(expr left_darkness,left_jut)
  733.   (suffix @@)(expr right_darkness,right_jut) suffix modifier =
  734.  serif($,$$,@,left_darkness,-left_jut) modifier;
  735.  serif($,$$,@@,right_darkness,right_jut) modifier; enddef;
  736.  
  737. Now use this instead of dish_serif in the following places:
  738. GREEKU:  Gamma, upper serif
  739.   Pi, both upper serifs (fix erroneous comments!)
  740. SYMBOL:  Amalgamation, both lower serifs (fix erroneous comments!)
  741. ROMANU:  B, both serifs
  742.   D, both serifs
  743.   E, both serifs
  744.   F, upper serif
  745.   L, lower serif
  746.   P, upper serif
  747.   R, upper serif
  748.   T, upper bracketing
  749. ROMSPU: AE, upper and lower middle serifs
  750.  
  751. 15. Change #2 wasn't quite good enough!
  752. @x in CMBASE
  753.  min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth);
  754. @y
  755.  min_Vround:=max(fine.breadth,crisp.breadth,tiny.breadth);
  756.  if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi
  757.  if flare<vround flare: flare:=vround flare; fi
  758. @z
  759.  
  760. 16. body_depth# is now called paren_depth#, since body_depth is
  761. computed differently. (This is a cosmetic change only; it affects
  762. files CMBASE, PUNCT, SYM, SYMBOL, and ROMMS.)
  763.  
  764. 17. more robust Sigma
  765. @x in GREEKU, page 9
  766. top y1=h; bot y2=h-slab; bot y4=0; x3l-x1l=4/11(w-2u); y3=.5h;
  767. @y
  768. top y1=h; bot y2=h-slab-eps; bot y4=0; x3l-x1l=4/11(w-2u); y3=.5h;
  769. @z
  770. @x in BIGOP, page 7
  771. top_arm_thickness=rule_thickness;
  772. @y
  773. top_arm_thickness=Vround rule_thickness;
  774. @z
  775. @x in BIGOP, page 7 (this change needed twice)
  776. top y1=0; bot y2=-top_arm_thickness; bot y4=-d; y3=-.5d;
  777. @y
  778. top y1=0; bot y2=-top_arm_thickness-eps; bot y4=-d; y3=-.5d;
  779. @z
  780.  
  781. 18. yet another refinement of change #2
  782. @x in CMBASE
  783.  forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem:
  784. @y
  785.  forsuffixes $=vair,bar,slab,cap_bar,cap_band,vair',vstem,cap_vstem,bold:
  786. @z
  787.  
  788. 19. slightly more robust `k'
  789. @x in ROMANL
  790. top y3=x_height; rt x3r=hround(r-letter_fit-.7u-right_jut);
  791. bot y6=0; rt x6r=hround(r-letter_fit-.3u-right_jut);
  792. @y
  793. top y3=x_height; rt x3r=hround(r-letter_fit-.7u-right_jut)+eps;
  794. bot y6=0; rt x6r=hround(r-letter_fit-.3u-right_jut)+eps;
  795. @z
  796.  
  797. 20. small parameter changes for consistency
  798. @x in CMBX6
  799. dish#:=.9/36pt#;    % amount erased at top or bottom of serifs
  800. @y
  801. dish#:=.8/36pt#;    % amount erased at top or bottom of serifs
  802. @z
  803. @x in CMBX5
  804. dish#:=.75/36pt#;    % amount erased at top or bottom of serifs
  805. @y
  806. dish#:=.7/36pt#;    % amount erased at top or bottom of serifs
  807. @z
  808. @x in CMSS9 and CMSSI9 [these two lines are not consecutive in the files!]
  809. notch_cut#:=23/36pt#;    % maximum breadth above or below notches
  810. cap_notch_cut#:=29/36pt#;  % max breadth above/below uppercase notches
  811. @y
  812. notch_cut#:=17/36pt#;    % maximum breadth above or below notches
  813. cap_notch_cut#:=24/36pt#;  % max breadth above/below uppercase notches
  814. @z
  815. @x in CMSS8 and CMSSI8 [these two lines are not consecutive in the files!]
  816. notch_cut#:=21/36pt#;    % maximum breadth above or below notches
  817. cap_notch_cut#:=27/36pt#;  % max breadth above/below uppercase notches
  818. @y
  819. notch_cut#:=16/36pt#;    % maximum breadth above or below notches
  820. cap_notch_cut#:=22/36pt#;  % max breadth above/below uppercase notches
  821. @z
  822. @x in CMTI9
  823. cap_hair#:=10/36pt#;    % uppercase hairline breadth
  824. @y
  825. cap_hair#:=11/36pt#;    % uppercase hairline breadth
  826. @z
  827. @x in CMTI8
  828. cap_hair#:=9.5/36pt#;    % uppercase hairline breadth
  829. @y
  830. cap_hair#:=11/36pt#;    % uppercase hairline breadth
  831. @z
  832. @x in CMTI7
  833. cap_hair#:=9/36pt#;    % uppercase hairline breadth
  834. @y
  835. cap_hair#:=10.5/36pt#;    % uppercase hairline breadth
  836. @z
  837. @x in CMTCSC10
  838. lower.cap_notch_cut#:=24pt#;  % max breadth above/below uppercase notches
  839. @y
  840. lower.cap_notch_cut#:=24/36pt#;  % max breadth above/below uppercase notches
  841. @z
  842.  
  843. 21. New parameter file CMFI10 was added; font_identifier is "CMFI".
  844. Also changed the name `cmit10' to `cmitt10'; font_identifier is "CMITT".
  845.  
  846. 22. Still more changes for robustness (based on resolution h120 x v108).
  847. @x in ROMAND and ITALD, "5"
  848. bot y5=vround(.53h-vair); top y6r=vround .61803h+o;
  849. @y
  850. bot y5=vround(.53h-vair); top y6r=max(vround .61803h+o,top y6r+y5+eps-y6l);
  851. @z
  852. @x in OLDDIG, "5"
  853. bot y5=vround(.53[-d,h]-vair); top y6r=(vround .61803[-d,h])+o;
  854. @y
  855. bot y5=vround(.53[-d,h]-vair);
  856. top y6r=max((vround .61803[-d,h])+o,top y6r+y5+eps-y6l);
  857. @z
  858. @x in ROMANU, "C"
  859.  bot y1=vround max(.6h,x_height-.5vair); y5=good.y .95(h-y1);
  860. @y
  861.  bot y1=min(vround max(.6h,x_height-.5vair),bot y2l-eps);
  862.  y5=max(good.y .95(h-y1),y4l+eps);
  863. @z
  864. @x in ROMANU, "G"
  865.  bot y1=vround max(.6h,x_height-.5vair);
  866. @y
  867.  bot y1=min(vround max(.6h,x_height-.5vair),bot y2l-eps);
  868. @z
  869. @x in GREEKL page 6 and TSETSL page 8
  870. y1=.9h; top y2l=h+oo; top y8r=x_height+oo; y4=y8;
  871. @y
  872. top y2l=h+oo; y1=min(.9h,y2r-eps); top y8r=x_height+oo; y4=y8;
  873. @z
  874. @x in GREEKL page 16
  875. x6=x7=w-2u; x8=.5w+.5u; y6=-.3d; y8=-3/4d-oo; bot y7r=-d-oo;
  876. @y
  877. x6=x7=w-2u; x8=.5w+.5u; y6=-.3d; bot y7r=-d-oo; y8=max(-3/4d-oo,y7l);
  878. @z
  879. @x in ITALL page 12, ITALMS page 6, ITALSP page 4
  880. lft x5r=hround-.5u; x4=1/3(w-u);
  881. @y
  882. x4=1/3(w-u); lft x5r=min(hround-.5u,lft x5r+x4-x5l-eps);
  883. @z
  884. @x in ROMANL, "g"
  885. x11=x13=.5w; bot y13r=-d-oo-1; x14=w-x12; z10'l=z10l;
  886. @y
  887. x11=x13=max(.5w,x10+eps); bot y13r=-d-oo-1; x14=w-x12; z10'l=z10l;
  888. @z
  889. @x in ROMANL, "s"
  890.  filldraw stroke z1e..tension.9..{left}z2e;  % upper arc and terminal
  891.  filldraw stroke z7e{left}..z8e; fi  % lower arc and terminal
  892. @y
  893.  filldraw stroke term.e(2,1,right,.9,4);  % upper arc and terminal
  894.  filldraw stroke term.e(7,8,left,1,4); fi  % lower arc and terminal
  895. @z
  896. @x in ROMANL, "c"
  897.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  898.   & pulled_super_arc.e(3,4)(.5superpull)
  899.   ..tension .9 and 1..z5e; fi  % arc and lower terminal
  900. @y
  901.  forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e;
  902.   if angle direction 1 of p.e>75:
  903.    p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor
  904.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  905.   & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi  % arc and lower terminal
  906. @z
  907. @x in ROMSPL, page 5
  908. lft x8r=hround(stem_edge+.5u+1); x7=max(x8l+eps,.4[lft x8r,x6]);
  909. @y
  910. lft x8r=min(hround(stem_edge+.5u+1),lft x8r+x6r-2eps-x8l);
  911. x7=max(x8l+eps,.4[lft x8r,x6]);
  912. @z
  913. @x in ROMAND and OLDDIG, "2"
  914.  lft x1r=hround .75u; bot y1l=vround .7h; y1r:=good.y y1r; x1l:=good.x x1l;
  915. @y
  916.  lft x1r=hround .75u; bot y1l=vround .7h; y1r:=good.y y1r+eps; x1l:=good.x x1l;
  917. @z
  918. @x in SYMBOL, page 42 (Fraktur R)
  919. z=(z20{up}...{right}z21)intersectionpoint(z22l--z22l+(h,0) rotated theta);
  920. @y
  921. path p; p=z20{up}...(z21--(w,y21));
  922. z=p intersectionpoint(z22l--z22l+(h,0) rotated theta);
  923. @z
  924.  
  925. 23. Another consequence of change 2:
  926. "vround" should be "Vround" in the BIGDEL programs for extensible arrows
  927. (five times).
  928. Also five times in the BIGOP programs for summation, product, coproduct.
  929.  
  930. 24. Cosmetic change to bring CMBASE in line with PLAIN.
  931. @x in CMBASE.MF
  932. def pickup secondary q =
  933.  if numeric q: currentpen:=pen_[q];
  934.   pen_top:=pen_top_[q];  pen_bot:=pen_bot_[q];
  935.   pen_lft:=pen_lft_[q];  pen_rt:=pen_rt_[q];
  936.   currentpen_path:=pen_path_[q];
  937.   if known breadth_[q]: currentbreadth:=breadth_[q]; fi
  938.  else: currentpen:=q yscaled aspect_ratio;
  939.   pen_top:=(ypart penoffset left of currentpen)_o_;
  940.   pen_bot:=(ypart penoffset right of currentpen)_o_;
  941.   pen_lft:=xpart penoffset down of currentpen;
  942.   pen_rt:=xpart penoffset up of currentpen;
  943.   path currentpen_path;
  944.  fi enddef;
  945. @y
  946. def numeric_pickup_ primary q =
  947.  currentpen:=pen_[q];
  948.  pen_lft:=pen_lft_[q];  pen_rt:=pen_rt_[q];
  949.  pen_top:=pen_top_[q];  pen_bot:=pen_bot_[q];
  950.  currentpen_path:=pen_path_[q];
  951.  if known breadth_[q]: currentbreadth:=breadth_[q]; fi enddef;
  952. @z
  953.  
  954. 25. false italic correction in lambda of texset fonts (Feb 25, 1986)
  955. @x in TEXSET
  956. mode_setup; font_setup;
  957. @y
  958. mode_setup; font_setup; mono_charic#:=0;
  959. @z
  960. @x ibid
  961. slant:=mono_charic#:=0;  % the remaining characters will not be slanted
  962. @y
  963. slant:=0;  % the remaining characters will not be slanted
  964. @z
  965. [now remove the occurrences of `charic:=0;' in TSETSL, as they are unnecessary]
  966.  
  967. *** The above changes are incorporated into the published book,
  968. *** Computer Modern Typefaces; this is "Version 2" (released March 5, 1986).
  969. Changes subsequent to `Version 2' as published in C&T, Volume E:
  970.  
  971. @x in GREEKU
  972. numeric shaved_stem; shaved_stem=hround .9[vair,.85cap_stem];
  973. @y
  974. numeric shaved_stem; shaved_stem=hround .9[vair,.85cap_stem];
  975. if shaved_stem<crisp.breadth: shaved_stem:=crisp.breadth; fi
  976. @z
  977.  
  978. @x in CMSS9 [this affects the TFM file to a small extent!]
  979. fig_height#:=236/36pt#;    % height of numerals
  980. @y
  981. fig_height#:=212/36pt#;    % height of numerals
  982. @z
  983.  
  984. @x in CMSSI9 [this affects the TFM file in ten hts and eleven italcorrs]
  985. fig_height#:=236/36pt#;    % height of numerals
  986. @y
  987. fig_height#:=212/36pt#;    % height of numerals
  988. @z
  989.  
  990. @x in CMR17 [no change to TFM file]
  991. curve#:=41/36pt#;    % lowercase curve breadth
  992. @y
  993. curve#:=40/36pt#;    % lowercase curve breadth
  994. @z
  995. @x
  996. cap_stem#:=40/36pt#;    % uppercase stem breadth
  997. cap_curve#:=48/36pt#;    % uppercase curve breadth
  998. @y
  999. cap_stem#:=41/36pt#;    % uppercase stem breadth
  1000. cap_curve#:=47/36pt#;    % uppercase curve breadth
  1001. @z
  1002. @x
  1003. serif_drop#:=17/36pt#;    % vertical drop of sloped serifs
  1004. @y
  1005. serif_drop#:=7/36pt#;    % vertical drop of sloped serifs
  1006. @z
  1007.  
  1008. @x in ROMAND [this fixes the `disappearing hairline' in some lowres 8's]
  1009.  lower_side=hround(.5[hair,stem]+stem_corr);
  1010. @y
  1011.  lower_side=hround(.5[hair,stem]+stem_corr);
  1012.  if lower_side>1.2upper_side: upper_side:=lower_side; fi
  1013. @z
  1014. % Note: the SAME change should also be made in files ITALD and OLDDIG
  1015.  
  1016. @x in ITALL [this fixes italic ell especially at low resolutions]
  1017. top y1=h; x1=x2; filldraw stroke z1e--z2e;  % stem
  1018. @y
  1019. top y1=h; x1=x2; filldraw stroke z1e--z2'e;  % stem
  1020. @z
  1021.  
  1022. @x in SYM, the plus-or-minus character
  1023. x1=x2=.5w; lft x3=lft=x5=hround u-eps; x4=x6=w-x3;
  1024. @y
  1025. x1=x2=.5w; lft x3=lft x5=hround u-eps; x4=x6=w-x3;
  1026. @z actually the code worked but it was "infelicitous"
  1027.  
  1028. @x in SYMBOL, the minus-or-plus character
  1029. x1=x2=.5w; lft x3=lft=x5=hround u-eps; x4=x6=w-x3;
  1030. @y
  1031. x1=x2=.5w; lft x3=lft x5=hround u-eps; x4=x6=w-x3;
  1032. @z actually the code worked but it was "infelicitous"
  1033.  
  1034. @x in ROMANU, letter J [fixes a bug if dish=0 and crisp<tiny and serifs]
  1035.  bulb(3,4,5);  % bulb
  1036. @y
  1037.  pickup tiny.nib; bulb(3,4,5);  % bulb
  1038. @z
  1039.  
  1040. @x in ROMANL, letter w [makes notch_cut more useful]
  1041.  else: fill diag_end(6r,5r,1,1,5l,6l)--.5[z5l,z6l]
  1042.    --.5[z5r,z6r]--cycle;% middle stem
  1043. @y
  1044.  else: fill diag_end(6r,5r,1,1,5l,6l)--.9[z5l,z6l]
  1045.    ..{z5-z6}.1[z5r,z6r]--cycle; % middle stem
  1046. @z the same change applies also to letter W in ROMANU
  1047.  
  1048. @x in CMBASE, makes lowres types (especially TT) look better
  1049.  define_blacker_pixels(notch_cut,cap_notch_cut);
  1050. @y
  1051.  define_blacker_pixels(notch_cut,cap_notch_cut);
  1052.  forsuffixes $=notch_cut,cap_notch_cut: if $<3: $:=3; fi endfor
  1053. @z
  1054.  
  1055. @x in BIGOP, the \displaystyle coproduct sign
  1056. lft x11=hround u; x1l-x11=x2l-x12=x22-x2r=hround cap_jut;
  1057. @y
  1058. lft x11=hround u; x1l-x11=x2l-x12=x22-x2r=hround 1.6cap_jut;
  1059. @z
  1060.  
  1061. @x in ROMANL, the letter m
  1062. lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l;
  1063. lft x3l=hround(.5w-.5stem); x5-x3=x3-x1;
  1064. if not monospace: r:=hround(x5+x1)-l; fi  % change width for better fit
  1065. @y
  1066. lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; % stem, sic
  1067. lft x3l=hround(.5w-.5mfudged.stem); x5-x3=x3-x1;
  1068. if not monospace: r:=hround(x5+x1)+r-w; fi  % change width for better fit
  1069. @z
  1070.  
  1071. @x a new routine for CMBASE, following change_width
  1072. @y
  1073. def center_on(expr x) = if not monospace: % change width for symmetric fit
  1074.  r:=r+2x-w; w:=2x; fi enddef;
  1075. @z
  1076. @x in SYMBOL, the elementary division operator
  1077. x3-.5dot_size=hround(.5w-.5dot_size); w:=r:=2x3;
  1078. @y
  1079. x3-.5dot_size=hround(.5w-.5dot_size); center_on(x3);
  1080. @z
  1081. Similarly, whenever the construction "w:=r:=2x*" appears, change it to
  1082. "center_on(x*)". This happens in the programs for elementary division operator
  1083. (as noted above), large triangle, large inverted triangle, lattice top,
  1084. lattice bottom, dagger mark, double dagger mark, club/diamond/heart/spade suit
  1085. (all in SYMBOL), plus the diamond operator and universal quantifier in SYM.
  1086. The following additional change needs to be made in the programs
  1087. for lattice top and lattice bottom:
  1088. @x
  1089. x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=r-x3;
  1090. @y
  1091. x1=x2=good.x .5w; center_on(x1); lft x3=hround u; x4=w-x3;
  1092. @z
  1093.  
  1094. @x in SYMBOL, at end of zero-width slash
  1095. labels(1,2); zero_width; endchar;
  1096. @y
  1097. labels(5,6); zero_width; endchar;
  1098. @z
  1099.  
  1100. @x in ROMANU, the letter Q (this change simply labels point 8 on proofs)
  1101. math_fit(-.3cap_height#*slant-.5u#,ic#); penlabels(1,2,3,4,5,6,7); endchar;
  1102. @y
  1103. math_fit(-.3cap_height#*slant-.5u#,ic#);
  1104. penlabels(1,2,3,4,5,6,7,8); endchar;
  1105. @z
  1106.  
  1107. (I sincerely hope there won't be any more!)
  1108.